#pragma once

#include <stdint.h>
#include <stdbool.h>

// 常量定义
#define CURRENT_DEVICE_TYPE DEVICE_TYPE_OTHER // 当前设备类型

#define MAX_MISSED_COUNT 3 // 最大掉线次数
#define MAX_DEVICES 50     // 最大设备容量

#define ASK_DEVICE_INFO_INTERVAL 20000      //  询问设备信息
#define SEND_DEVICE_INFO_INTERVAL 3000      //  广播设备信息
#define Device_ONLINE_DETECT_INTERVAL 60000 // 自动检测离线时间间隔（ms）

// 消息类型
typedef enum
{
    ASK_DEVICE_INFO = 1,      // 广播询问设备信息
    RESPONSE_ASK_DEVICE_INFO, // 回复设备信息

    DEVICE_ACTIVE_SEND_INFO, // 子设备主动发送信息

    BROADCAST_ALL_SUB_DEVICE, // 将所有的连接设备广播出去
    BROADCAST_NET_INFO,       // 将网络信息发送出去，如IP地址，wifi名称密码等

    SUB_DEVICE_ASK_NET_INFO = 6, // 子设备询问网络配置信息

    SUB_DEVICE_ASK_TARGET_DEVICE_INFO, // 子设备询问目标设备的信息
    RESPONSE_SUB_DEVICE_ASK_TARGET_DEVICE_INFO,        // 返回询问目标设备的信息

    MOVE_CAR = 9,           // 移动车辆
    MOVE_CAMERA = 10,        // 移动摄像头
    MOVE_MechanicalArm = 11, // 控制机械臂
    PHONE_SET_DEVICE_ENABLE = 12,  // 开启或关闭功能模块
} MessageType;

static const char *MessageTypeDesList[] = {
    [ASK_DEVICE_INFO] = "广播询问设备信息",
    [RESPONSE_ASK_DEVICE_INFO] = "回复设备信息",
    [DEVICE_ACTIVE_SEND_INFO] = "子设备主动发送信息",
    [BROADCAST_ALL_SUB_DEVICE] = "将所有的连接设备广播出去",
    [BROADCAST_NET_INFO] = "将网络信息发送出去，如IP地址，wifi名称密码等",
    [SUB_DEVICE_ASK_NET_INFO] = "子设备询问网络配置信息",
    [SUB_DEVICE_ASK_TARGET_DEVICE_INFO] = "子设备询问目标设备的信息",
    [RESPONSE_SUB_DEVICE_ASK_TARGET_DEVICE_INFO] = "返回询问目标设备的信息",
    [MOVE_CAR] = "移动车辆",
    [MOVE_CAMERA] = "移动摄像头",
    [MOVE_MechanicalArm] = "控制机械臂",
    [PHONE_SET_DEVICE_ENABLE] = "开启或关闭功能模块",
};

// 设备类型
typedef enum
{
    DEVICE_TYPE_OTHER = 0,
    DEVICE_TYPE_SERVICE = 1, // 服务端
    DEVICE_TYPE_CAR,
    DEVICE_TYPE_AVRTC,
    DEVICE_TYPE_External_HardWare,
    DEVICE_TYPE_PHONE
} DeviceType;

static const char *DeviceTypeDesList[] = {
    [DEVICE_TYPE_OTHER] = "其他",
    [DEVICE_TYPE_SERVICE] = "服务设备",
    [DEVICE_TYPE_CAR] = "四驱车设备",
    [DEVICE_TYPE_AVRTC] = "音视频设备",
    [DEVICE_TYPE_External_HardWare] = "外部硬件(包括PS2，测距)",
    [DEVICE_TYPE_PHONE] = "手机端",
};

// 设备信息结构体
typedef struct
{
    DeviceType deviceType; // 设备类型
    uint8_t mac[6];        // 设备 MAC
    bool isOnline;         // 在线状态
    int missedCount;       // 未回应次数
    char msgId[32];        // 存储 msgId
} device_info_t;